/*
 * JPanelWizardEspejoStandardSelectConfigFinish.java
 *
 * Created on 13-oct-2011, 14:55:32
 */
package com.ufps.cuatro.vistas.asistente.espejo.complejo.wizard;

import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JCheckBox;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListDataListener;

import org.jdesktop.application.Action;

import com.ufps.cuatro.CuatroApp;
import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.modelo.analizador.ObjetoReflexion;
import com.ufps.cuatro.modelo.biblioteca.BibliotecaTrabajo;
import com.ufps.cuatro.modelo.representacion.ObjetoTipoDatoReflexion;
import com.ufps.cuatro.modelo.representacion.UtilRepresentacion;
import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGenerador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorEnum;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorString;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorUnitario;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorVinculador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegrador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorMetodo;
import com.ufps.cuatro.util.Bandera;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.generadores.GeneradorComponentes;
import com.ufps.cuatro.util.render.MyListRendererJLabel;
import com.ufps.cuatro.util.render.MyListRendererJLabelWizardIntegrador;
import com.ufps.cuatro.util.wizard.UtilWizard;
import com.ufps.cuatro.vistas.representacion.JDialogSeleccionComponente;

/**
 *
 * @author Carlos A. Torres C. 
 */
public class JPanelWizardEspejoStandardSelectConfigFinish extends javax.swing.JPanel implements Observer{
    private static final long serialVersionUID = 697987061790548328L;
    
    private ArrayList<ObjetoReflexion> objElementos;        
    private ArrayList<ComponenteDistribuidorIntegrador> objComponentesIntegradores;    
    private ArrayList<ComponenteDistribuidorIntegrador> objComponentesIntegradoresAgregados;    
    private ArrayList<Componente> objComponentesIncluidos;    
    private ComponenteDistribuidorIntegrador objComponentesIntegrador;    
    private ComponenteDistribuidorGenerador objComponentesGenerador; 
    private ComponenteDistribuidorGenerador objComponentesGeneradorDefault; 
    private HashMap<ComponenteDistribuidorIntegrador, ComponenteDistribuidorGenerador[]> objMapaComponentes;
    private int selectionIndex;

    /** Creates new form JPanelWizardEspejoStandardSelectConfigFinish */
    public JPanelWizardEspejoStandardSelectConfigFinish() {
        initComponents();        
        objElementos = new ArrayList<ObjetoReflexion>();
        objComponentesIntegradores = new ArrayList<ComponenteDistribuidorIntegrador>();
        objComponentesIntegradoresAgregados = new ArrayList<ComponenteDistribuidorIntegrador>();
        objMapaComponentes = new HashMap<ComponenteDistribuidorIntegrador, ComponenteDistribuidorGenerador[]>();
    }
    
    public void setObjElementos(ArrayList<ObjetoReflexion> objElementos) {        
        //if(!objElementos.equals(this.objElementos)){
            this.objElementos = objElementos;
            this.objComponentesIntegradores = 
                    GeneradorComponentes.representarComponentesIntegradoresPorObjetosReflexion(objElementos);             
            if(!objComponentesIntegradoresAgregados.isEmpty()){
                objComponentesIntegradores.addAll(objComponentesIntegradoresAgregados);
            }
            if(!objComponentesIntegradores.isEmpty()){
                this.loadRendererJListInluidos();                                
            }
        //}
    }
    
    private void crearEstructuraIncluidosIntegrador() {  
        objComponentesIncluidos = new ArrayList<Componente>();
        if(!objComponentesIntegrador.getObjComponentesDistribuidores().isEmpty()){
            objComponentesIncluidos.addAll(objComponentesIntegrador.getObjComponentesDistribuidores());
        }
        if(objComponentesIntegrador instanceof ComponenteDistribuidorIntegradorMetodo){
            ComponenteDistribuidorIntegradorMetodo objT = (ComponenteDistribuidorIntegradorMetodo) objComponentesIntegrador;
            if(objT.getObjComponenteReturn() != null){
                objComponentesIncluidos.add(objT.getObjComponenteReturn());
            }
        }                
        UtilRender.helperJList(jListParametros, objComponentesIncluidos, javax.swing.ListSelectionModel.SINGLE_SELECTION);
        MyListRendererJLabelWizardIntegrador objRenderer = new MyListRendererJLabelWizardIntegrador();
        jListParametros.setCellRenderer(objRenderer);   
        if(!objComponentesIncluidos.isEmpty()){
            jListParametros.setSelectedIndex(0);
        }
    }

    public void addCheckBoxActionListener(ActionListener l) {
        jCheckBoxConfirmar.addActionListener(l);
    }
    
    public boolean isCheckBoxSelected() {
        return jCheckBoxConfirmar.isSelected();
    }          
    
    public ArrayList<ComponenteDistribuidorIntegrador> getObjComponentesIntegradores() {
        return objComponentesIntegradores;
    }
    
    @Action
    public void delElemento() {
        if(this.objComponentesIntegradores.isEmpty()){
            Utileria.mostrarMensaje(this, "Debe Agregar Componentes.", "", JOptionPane.WARNING_MESSAGE);
        }
        if(this.jListElementos.isSelectionEmpty()){
            Utileria.mostrarMensaje(this, "Debe Seleccionar un Compoente.", "", JOptionPane.WARNING_MESSAGE);
        }
        if(!Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente?", ""))return;        
        int i = this.jListElementos.getSelectedIndex();
        this.objComponentesIntegradores.remove(i);
        this.loadRendererJListInluidos();
    }
    
    @Action
    public void addCDG() {        
    }
    
    @Action
    public void addCDIM() {
        int[] tipoComponente = {Componente.COMPONENTE_DISTRIBUIDOR_INTEGRADOR};        
        JDialogSeleccionComponente objJDialogSeleccionComponente = 
                new JDialogSeleccionComponente(this, JDialogSeleccionComponente.SELECCION_COLECCION_OBJECT, tipoComponente, BibliotecaTrabajo.EXCLUSION_CDIE);
        objJDialogSeleccionComponente.setLocationRelativeTo(UtilWizard.objWizard.getDialog());                
        CuatroApp.getApplication().show(objJDialogSeleccionComponente);  
    }
    
    
    /**
     * Carga la Lista de <code>Componente</code>s Incluidos en la Distribución Actual.
     */
    public void loadRendererJListInluidos() {
        JList objLista = new JList(this.objComponentesIntegradores.toArray());
        this.jListElementos.setModel(objLista.getModel());
        this.jListElementos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        MyListRendererJLabel objRender = new MyListRendererJLabel(0);
        this.jListElementos.setCellRenderer(objRender);         
        this.jListElementos.setSelectedIndex(0);
    }
    
    public boolean isListEmpty(){
        return this.objComponentesIntegradores.isEmpty();
    }
    
    public void addListDataListener(ListDataListener i){
        this.jListElementos.getModel().addListDataListener(i);
    }
    
    
    public void update(Observable o, Object arg) {
        if(o instanceof Bandera){            
            Bandera objBandera = (Bandera) o;
            switch(objBandera.getEstado()){                
                case Bandera.SELECCION_COMPONENTE_DISTRIBUIDOR:
                    if(!objComponentesIntegradores.contains((ComponenteDistribuidorIntegrador) objBandera.getObj())){
                        this.addComponente((ComponenteDistribuidorIntegrador) objBandera.getObj());                        
                    }
                    else{
                        UtilRender.msgAdvertencia("No puede ingresar Componente que han sido incluidos Previamente.");
                    }                    
                    break;                
            }                             
        }
    }
    
    private void addComponente(ComponenteDistribuidorIntegrador obj){
        objComponentesIntegradores.add(obj);    
        objComponentesIntegradoresAgregados.add(obj);
        loadRendererJListInluidos();
    }

    public JToolBar getjToolBarInclusionesExtras() {
        return jToolBarInclusionesExtras;
    }

    public ArrayList<ObjetoReflexion> getObjElementos() {
        return objElementos;
    }

    public JCheckBox getjCheckBoxConfirmar() {
        return jCheckBoxConfirmar;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jCheckBoxConfirmar = new javax.swing.JCheckBox();
        jLabelTitulo = new javax.swing.JLabel();
        jLabelInfoIntegradoresAgregados = new javax.swing.JLabel();
        jToolBarInclusionesExtras = new javax.swing.JToolBar();
        jButtonAddIntegrador = new javax.swing.JButton();
        jSeparator4 = new javax.swing.JToolBar.Separator();
        jButtonDelIntegrador = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jListElementos = new javax.swing.JList();
        jLabel1 = new javax.swing.JLabel();
        jCheckBoxaddReturn = new javax.swing.JCheckBox();
        jScrollPane2 = new javax.swing.JScrollPane();
        jListParametros = new javax.swing.JList();
        jComboBoxRepresentaciones = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();

        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(JPanelWizardEspejoStandardSelectConfigFinish.class);
        jCheckBoxConfirmar.setFont(resourceMap.getFont("jCheckBoxConfirmar.font")); // NOI18N
        jCheckBoxConfirmar.setText(resourceMap.getString("jCheckBoxConfirmar.text")); // NOI18N
        jCheckBoxConfirmar.setName("jCheckBoxConfirmar"); // NOI18N

        jLabelTitulo.setBackground(resourceMap.getColor("jLabelTitulo.background")); // NOI18N
        jLabelTitulo.setIcon(resourceMap.getIcon("jLabelTitulo.icon")); // NOI18N
        jLabelTitulo.setText(resourceMap.getString("jLabelTitulo.text")); // NOI18N
        jLabelTitulo.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabelTitulo.setName("jLabelTitulo"); // NOI18N
        jLabelTitulo.setOpaque(true);

        jLabelInfoIntegradoresAgregados.setText(resourceMap.getString("jLabelInfoIntegradoresAgregados.text")); // NOI18N
        jLabelInfoIntegradoresAgregados.setName("jLabelInfoIntegradoresAgregados"); // NOI18N

        jToolBarInclusionesExtras.setFloatable(false);
        jToolBarInclusionesExtras.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jToolBarInclusionesExtras.setRollover(true);
        jToolBarInclusionesExtras.setBorderPainted(false);
        jToolBarInclusionesExtras.setName("jToolBarInclusionesExtras"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(JPanelWizardEspejoStandardSelectConfigFinish.class, this);
        jButtonAddIntegrador.setAction(actionMap.get("addIntegrador")); // NOI18N
        jButtonAddIntegrador.setFocusable(false);
        jButtonAddIntegrador.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonAddIntegrador.setName("jButtonAddIntegrador"); // NOI18N
        jButtonAddIntegrador.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBarInclusionesExtras.add(jButtonAddIntegrador);

        jSeparator4.setName("jSeparator4"); // NOI18N
        jToolBarInclusionesExtras.add(jSeparator4);

        jButtonDelIntegrador.setAction(actionMap.get("delIntegrador")); // NOI18N
        jButtonDelIntegrador.setFocusable(false);
        jButtonDelIntegrador.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonDelIntegrador.setName("jButtonDelIntegrador"); // NOI18N
        jButtonDelIntegrador.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBarInclusionesExtras.add(jButtonDelIntegrador);

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        jListElementos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jListElementos.setName("jListElementos"); // NOI18N
        jListElementos.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jListElementosValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jListElementos);

        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        jCheckBoxaddReturn.setAction(actionMap.get("updateAddReturn")); // NOI18N
        jCheckBoxaddReturn.setText(resourceMap.getString("jCheckBoxaddReturn.text")); // NOI18N
        jCheckBoxaddReturn.setName("jCheckBoxaddReturn"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jListParametros.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jListParametros.setName("jListParametros"); // NOI18N
        jListParametros.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jListParametrosValueChanged(evt);
            }
        });
        jScrollPane2.setViewportView(jListParametros);

        jComboBoxRepresentaciones.setAction(actionMap.get("updateRepresentacionSeleccion")); // NOI18N
        jComboBoxRepresentaciones.setName("jComboBoxRepresentaciones"); // NOI18N

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jSeparator1.setName("jSeparator1"); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelInfoIntegradoresAgregados, javax.swing.GroupLayout.PREFERRED_SIZE, 566, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jComboBoxRepresentaciones, 0, 584, Short.MAX_VALUE)
                            .addComponent(jCheckBoxaddReturn, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE)
                            .addComponent(jCheckBoxConfirmar, javax.swing.GroupLayout.DEFAULT_SIZE, 584, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jToolBarInclusionesExtras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabelTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 641, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jLabelTitulo, javax.swing.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabelInfoIntegradoresAgregados)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE)
                        .addGap(4, 4, 4)
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jComboBoxRepresentaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jCheckBoxaddReturn)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jCheckBoxConfirmar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jToolBarInclusionesExtras, javax.swing.GroupLayout.DEFAULT_SIZE, 290, Short.MAX_VALUE))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void jListElementosValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jListElementosValueChanged
        if(!this.jListElementos.isSelectionEmpty()){
            if(jListElementos.getSelectedValue() instanceof ComponenteDistribuidorIntegrador){
                objComponentesIntegrador = (ComponenteDistribuidorIntegrador) this.jListElementos.getSelectedValue();
                crearEstructuraIncluidosIntegrador();
                if(objComponentesIntegrador instanceof ComponenteDistribuidorIntegradorMetodo){
                    ComponenteDistribuidorIntegradorMetodo objComponenteDistribuidorIntegradorMetodo =
                            (ComponenteDistribuidorIntegradorMetodo) objComponentesIntegrador;
                    this.jCheckBoxaddReturn.setSelected(objComponenteDistribuidorIntegradorMetodo.isAddReturn());
                }            
            }
        }
    }//GEN-LAST:event_jListElementosValueChanged

    private void jListParametrosValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_jListParametrosValueChanged
        if(!this.jListParametros.isSelectionEmpty()){
            selectionIndex = jListParametros.getSelectedIndex();
            if(jListParametros.getSelectedValue() instanceof ComponenteDistribuidorGenerador){                
                objComponentesGenerador = (ComponenteDistribuidorGenerador) jListParametros.getSelectedValue();
                if(objMapaComponentes.get(objComponentesIntegrador) == null){
                    objComponentesGeneradorDefault = objComponentesGenerador;
                    int size = objComponentesIncluidos.size();
                    ComponenteDistribuidorGenerador[] objParametros = new ComponenteDistribuidorGenerador[size];
                    objParametros[selectionIndex] = objComponentesGenerador;                    
                    objMapaComponentes.put(objComponentesIntegrador, objParametros);
                }
                else{                    
                    ComponenteDistribuidorGenerador[] objParametros = objMapaComponentes.get(objComponentesIntegrador);
                    if(objParametros[selectionIndex] == null){
                        objComponentesGeneradorDefault = objComponentesGenerador;
                        objParametros[selectionIndex] = objComponentesGenerador;                    
                        objMapaComponentes.put(objComponentesIntegrador, objParametros);
                    }
                    else{
                        objComponentesGeneradorDefault = objParametros[selectionIndex];
                    }                    
                }
                ObjetoTipoDatoReflexion objObjetoTipoDatoReflexion = objComponentesGenerador.getObjTipoDato();
                ArrayList<ComponenteDistribuidorGenerador> objList = new ArrayList<ComponenteDistribuidorGenerador>();
                ArrayList<ComponenteDistribuidorGenerador> objCDG = UtilRepresentacion.objBibliotecaTrabajoLocal.devolverColeccionRepresentacionesTipoDatoEntrada(objObjetoTipoDatoReflexion);
                if(objList.contains(objComponentesGeneradorDefault)){
                    objList.add(objComponentesGeneradorDefault);
                }
                objList.addAll(objCDG);                
                UtilRender.helperRenderJComboBox(jComboBoxRepresentaciones, objList, 0);
                jComboBoxRepresentaciones.setSelectedItem(objComponentesGenerador);
            }
        }        
        else{
            selectionIndex = -1;
        }            
    }//GEN-LAST:event_jListParametrosValueChanged

    @Action
    public void addIntegrador() {
        int[] tipoComponente = {Componente.COMPONENTE_DISTRIBUIDOR_INTEGRADOR};        
        JDialogSeleccionComponente objJDialogSeleccionComponente = 
                new JDialogSeleccionComponente(this, JDialogSeleccionComponente.SELECCION_COLECCION_OBJECT, tipoComponente, BibliotecaTrabajo.EXCLUSION_CDIE);
        objJDialogSeleccionComponente.setLocationRelativeTo(UtilWizard.objWizard.getDialog());                
        CuatroApp.getApplication().show(objJDialogSeleccionComponente);
    }

    @Action
    public void delIntegrador() {
        if(this.objComponentesIntegradores.isEmpty()){
            Utileria.mostrarMensaje(this, "Debe Agregar Componentes.", "", JOptionPane.WARNING_MESSAGE);
            return;
        }
        if(this.jListElementos.isSelectionEmpty()){
            Utileria.mostrarMensaje(this, "Debe Seleccionar un Compoente.", "", JOptionPane.WARNING_MESSAGE);
            return;
        }
        int i = this.jListElementos.getSelectedIndex();        
        ComponenteDistribuidorIntegrador objComponenteDistribuidorIntegradorTemp = objComponentesIntegradores.get(i);
        if(objComponenteDistribuidorIntegradorTemp instanceof ComponenteDistribuidorIntegradorMetodo){
            Utileria.mostrarMensaje(this, "No puede Eliminar un Componente Integrador Generado por un Método."
                    + "\nElimine el Método que lo genera para eliminar la Representación.", "", JOptionPane.WARNING_MESSAGE);
            return;
        }
        if(!Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente?", ""))return;                
        if(!objComponentesIntegradoresAgregados.isEmpty()){            
            if(objComponentesIntegradoresAgregados.contains(objComponenteDistribuidorIntegradorTemp)){
                objComponentesIntegradoresAgregados.remove(objComponenteDistribuidorIntegradorTemp);
                objComponentesIntegradores.remove(i);
                if(objComponentesIntegradores.isEmpty()){//Control del caso reportado en el cual se elimina el unico componente agregado.
                    if(jCheckBoxConfirmar.isSelected()){                                  
                        jCheckBoxConfirmar.doClick();                
                    }
                }
            }
        }
        this.loadRendererJListInluidos();
    }

    @Action
    public void updateAddReturn() {        
        if(objComponentesIntegrador instanceof ComponenteDistribuidorIntegradorMetodo){
            ComponenteDistribuidorIntegradorMetodo objComponenteDistribuidorIntegradorMetodo =
                    (ComponenteDistribuidorIntegradorMetodo) objComponentesIntegrador;            
            objComponenteDistribuidorIntegradorMetodo.setAddReturn(jCheckBoxaddReturn.isSelected());            
        }  
    }

    @Action
    public void updateRepresentacionSeleccion() {
        if(selectionIndex >= 0){
            ComponenteDistribuidorGenerador objNewComponente = (ComponenteDistribuidorGenerador) this.jComboBoxRepresentaciones.getSelectedItem();
            ComponenteDistribuidorGenerador objOldComponente = (ComponenteDistribuidorGenerador) this.objComponentesIncluidos.get(selectionIndex);
            if(!objOldComponente.equals(objNewComponente)){
                objNewComponente.setStrLabelName(objOldComponente.getStrLabelName());
                objNewComponente.setStrLabelTitle(objOldComponente.getStrLabelTitle());
                objNewComponente.setObjTipoDato(objOldComponente.getObjTipoDato());
                
                if(objNewComponente instanceof ComponenteDistribuidorGeneradorVinculador){
                    ComponenteDistribuidorGeneradorVinculador objComponenteDistribuidorGeneradorVinculador = (ComponenteDistribuidorGeneradorVinculador) objNewComponente;
                    GeneradorComponentes.formatearNombresComponenteGenerador(objComponenteDistribuidorGeneradorVinculador, objOldComponente.getStrLabelName(), objOldComponente.getStrLabelTitle());
                }
                else if(objNewComponente instanceof ComponenteDistribuidorGeneradorUnitario ||
                        objNewComponente instanceof ComponenteDistribuidorGeneradorString ||
                        //objNewComponente instanceof ComponenteDistribuidorGeneradorVinculador ||
                        objNewComponente instanceof ComponenteDistribuidorGeneradorEnum){
                    GeneradorComponentes.formatearNombresComponenteGenerador(objNewComponente, objOldComponente.getStrLabelName(), objOldComponente.getStrLabelTitle());
                }
                
                objComponentesIncluidos.set(selectionIndex, objNewComponente);                 
                if(!objComponentesIntegrador.getObjComponentesDistribuidores().isEmpty()){
                    int size = objComponentesIntegrador.getObjComponentesDistribuidores().size();
                    int sIncluidos = objComponentesIncluidos.size();
                    if(sIncluidos == size){//No hay Return solo Parametro
                        objComponentesIntegrador.getObjComponentesDistribuidores().set(selectionIndex, objNewComponente);
                    }
                    else if(selectionIndex <= size - 1){//Parametro
                        objComponentesIntegrador.getObjComponentesDistribuidores().set(selectionIndex, objNewComponente);
                    }
                    else if(selectionIndex == size){//Return
                        ComponenteDistribuidorIntegradorMetodo objT = (ComponenteDistribuidorIntegradorMetodo) objComponentesIntegrador;
                        if(objT.getObjComponenteReturn() != null){
                            objT.setObjComponenteReturn(objNewComponente);
                        }                        
                    }
                }
                else if(objComponentesIntegrador instanceof ComponenteDistribuidorIntegradorMetodo){
                    ComponenteDistribuidorIntegradorMetodo objT = (ComponenteDistribuidorIntegradorMetodo) objComponentesIntegrador;
                    if(objT.getObjComponenteReturn() != null){
                        objT.setObjComponenteReturn(objNewComponente);
                    }
                }
                objComponentesIntegrador.cargarPlantillasDesdeArchivoProperties(null);
                crearEstructuraIncluidosIntegrador();
                UtilRender.printlnConsole("Cambio de Componente: " + objOldComponente.getName() + " por " + objNewComponente.getName(), UtilRender.ACTION_NORMAL, true);
            }
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAddIntegrador;
    private javax.swing.JButton jButtonDelIntegrador;
    private javax.swing.JCheckBox jCheckBoxConfirmar;
    private javax.swing.JCheckBox jCheckBoxaddReturn;
    private javax.swing.JComboBox jComboBoxRepresentaciones;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabelInfoIntegradoresAgregados;
    private javax.swing.JLabel jLabelTitulo;
    private javax.swing.JList jListElementos;
    private javax.swing.JList jListParametros;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator4;
    private javax.swing.JToolBar jToolBarInclusionesExtras;
    // End of variables declaration//GEN-END:variables
}
